#!/system/bin/sh

# Git 仓库目录
REPO_DIR="/data/data/com.termux/files/home/mpsf"
# 日志文件
LOG_FILE="/data/data/com.termux/files/home/mpsf/update.log"
# 远程仓库地址（使用 HTTPS）
REPO_URL="https://gitee.com/AnHaoK/mpsf.git"
# Git 二进制文件路径
GIT_BIN="/data/data/com.termux/files/usr/bin/git"

# 确保日志文件目录存在
mkdir -p "$(dirname "$LOG_FILE")"

# 日志记录函数
log_message() {
    echo "$(date '+%Y-%m-%d %H:%M:%S'): $1" >> "$LOG_FILE"
}

# 检查 Git 二进制文件是否存在
if [ ! -x "$GIT_BIN" ]; then
    log_message "错误：Git 二进制文件未在 $GIT_BIN 找到"
    exit 1
fi

# 切换到仓库目录
cd "$REPO_DIR" || {
    log_message "错误：无法访问仓库目录 $REPO_DIR"
    exit 1
}

# 检查 Git 仓库是否已初始化
if [ ! -d ".git" ]; then
    log_message "非 Git 仓库，正在从 $REPO_URL 克隆..."
    "$GIT_BIN" clone "$REPO_URL" "$REPO_DIR" >> "$LOG_FILE" 2>&1
    if [ $? -ne 0 ]; then
        log_message "错误：克隆仓库失败"
        exit 1
    fi
    # 克隆后切换到仓库目录
    cd "$REPO_DIR" || {
        log_message "错误：无法切换到克隆的仓库目录 $REPO_DIR"
        exit 1
    }
fi

while true; do
    # 获取当前仓库的 HEAD
    CURRENT_HASH=$("$GIT_BIN" rev-parse HEAD 2>/dev/null)
    if [ $? -ne 0 ]; then
        log_message "错误：无法获取当前 HEAD"
        sleep 30
        continue
    fi

    # 检查远程更新
    log_message "正在检查远程更新..."
    "$GIT_BIN" fetch origin >> "$LOG_FILE" 2>&1
    if [ $? -ne 0 ]; then
        log_message "错误：无法获取远程仓库更新"
        sleep 30
        continue
    fi

    # 获取远程分支的 HEAD
    REMOTE_HASH=$("$GIT_BIN" rev-parse origin/master 2>/dev/null)
    if [ $? -ne 0 ]; then
        log_message "错误：无法获取远程分支 HEAD"
        sleep 30
        continue
    fi

    # 检查是否有更新
    if [ "$CURRENT_HASH" != "$REMOTE_HASH" ] && [ -n "$REMOTE_HASH" ]; then
        log_message "检测到仓库更新，正在拉取更改..."

        # 拉取最新代码
        "$GIT_BIN" --git-dir="$REPO_DIR/.git" --work-tree="$REPO_DIR" pull origin master >> "$LOG_FILE" 2>&1
        if [ $? -ne 0 ]; then
            log_message "错误：拉取更新失败"
            sleep 30
            continue
        fi

        # 停止所有 Python 脚本
        log_message "正在停止所有 Python 脚本..."
        pkill -f python 2>/dev/null
        if [ $? -eq 0 ]; then
            log_message "Python 脚本已停止"
        else
            log_message "警告：没有运行中的 Python 脚本或停止失败"
        fi

        # 等待进程终止
        sleep 2

        # 复制整个 REPO_DIR 到 /data/local/tmp/mpsf/
        log_message "正在将 $REPO_DIR 复制到 /data/local/tmp/mpsf/..."
        mkdir -p /data/local/tmp/mpsf
        cp -r "$REPO_DIR"/* /data/local/tmp/mpsf/ >> "$LOG_FILE" 2>&1
        if [ $? -ne 0 ]; then
            log_message "错误：复制文件到 /data/local/tmp/mpsf/ 失败"
        else
            log_message "文件复制成功"
        fi
    else
        log_message "仓库已是最新，无需更新"
    fi

    # 每 30 秒检查一次
    sleep 30
done